/**
 * @file clock.h
 * @brief 时钟类
 * @author lihui@linekong.com
 * @version 1.0
 * @date 2011-01-23
 */
#ifndef _LK_CLOCK_H_
#define _LK_CLOCK_H_

#include "common_define.h"


namespace common
{

	/**
	 * @brief 用于计时的服务器时钟,基于GetTimeOfDay
	 */
	class Clock
	{
	public:

		/**
		* @brief 构造函数
		*/
		Clock( );

		/**
		* @brief 析构函数
		*/
		~Clock( );

		/**
		 * @brief active 判断时钟是否开始计时
		 *
		 * @return 激活或者未激活
		 */
		bool active( ) const { return active_; }

		/**
		* @brief 从开始计时到当前已经逝去的时间
		*
		* @return 如果未被激活，返回上次记录的流逝时间
		*/
		int32_t elapsed( ) const;

		/**
		* @brief 开始计时
		*
		* @return
		*/
		int32_t Start( );

		/**
		 * @brief reset 重新开始计时
		 *
		 * @return
		 */
		int32_t Reset( ) { return Start( ); }

		/**
		* @brief 停止计时
		*
		* @return
		*/
		int32_t Stop( );

		/**
		* @brief 获取当前微秒
		*
		* @return 微秒
		*/
		static uint64_t NowUSecond( );

	private:

		/**
		 * @brief 开始时间
		 */
		unsigned int start_;

		/**
		 * @brief  流逝的时间
		 */
		int elapsed_;

		/**
		 * @brief 是否处于激活状态
		 */
		bool active_;
	};

}//common

#endif

